In order to provide for high-throughput of work, or nearly continuous availability, distributed computing systems are often utilized. A distributed computing system typically includes two or more computing devices which frequently operate somewhat autonomously and communicate with each other over a network or other communication path.
One example of a distributed computing system is a host conducting input/output (I/O) operations in a storage area network (SAN) which includes a storage controller. A storage area network is frequently used to couple computer storage devices such as disk arrays, tape libraries, optical jukeboxes or other storage devices, to hosts in a manner which permits the storage devices to appear to the operating systems of the hosts as locally attached to the hosts. In operation, a host may request data from a storage controller which may in turn retrieve the data from one or more storage devices. The host may also transmit data to the storage controller to be written to one or more storage devices.
Each host communicates with the storage controller through a channel or communication path of the storage area network. Each communication path typically includes one or more physical hardware communication channels such as a digital electronic communication bus, a digital optical communication bus, or a similar communication channel. In addition, each communication path may include one or more logical control blocks, addresses, communication devices, digital switches, and the like for coordinating the transmission of digital messages between the host and the storage controller. Fibre Channel (FC) is often used in storage area networks and is a high speed networking technology in which signals may be transmitted over various transmission media including fiber optic cable or twisted pair copper cables, for example.
A host may have one or more application servers running applications which assign input/output (I/O) tasks to the storage controller. The servers are typically interconnected as nodes of one or more clusters in a distributed computing system, in which each node includes a server often referred to as a central electronics complex (CEC) server.
The I/O tasks may be directed to specific volumes in the storage. The storage controller may further have multiple input/output (I/O) adapters such as host adapters which enable the servers to communicate with the hosts, and device adapters which enable the servers of the storage controller to communicate with the storage devices. Switches may be used to couple selected servers to selected I/O adapters of the storage controller.
Each server may have one or more central processing units (CPUs) in which the processing as well as the memory and other resources of the server may be apportioned into physical or logical partitions (often referred to as a “virtual server” or “virtual machine”), each of which is capable of running an individual copy of an operating system and performing the service functions of a “server”. Examples of various virtual machine infrastructures include those marketed under the terms “vmware,” “Xen,” “KVM,” “Hyper-V,” and others. To expedite I/O operations, data which is expected to be read in future read I/O operations may be cached in a cache maintained by an application server. Such application-server side caches typically employ flash or other types of relatively fast memory. In addition, because the cache is typically located within or close to the application server, communication delays which may be experienced in communicating with the networked storage controller and its storage, may be reduced. As a consequence, data may frequently be read more quickly from the application-server side cache than from the networked storage controller.
The contents of the application-server side cache is typically managed by cache management software which keeps track of which locations of the storage of the storage controller have been cached for one or more servers or virtual servers. Examples of application-server side cache management hardware and software include VFCache by EMC, FlashAccel by NetApp, IOTurbine by FusionIO, FlashSoft by SanDisk, etc.
Virtual servers may be migrated from one host, the “source host” to another host, the “target host.” Such live migration may take place to more evenly balance the loads on the hosts, to consolidate workloads, allow for system maintenance and other reasons. Each virtual machine infrastructure typically has an associated virtual machine migration infrastructure to accomplish the migration of a virtual machine or virtual server from one host to another. Thus, the virtual machine infrastructure marketed as “vmware” has an associated virtual machine migration infrastructure marketed as “vMotion,” for example. To accomplish the migration of a virtual machine or virtual server from one host to another, cooperation of multiple components of the hosts is usually involved. Thus, the virtual machine migration infrastructure typically maintains the virtual machine migration related information such as the identity of the source and target hosts, and when a virtual machine migration starts and finishes, for example.
In the event that the virtual machine being migrated has an application-server side cache, that cache is typically extinguished at the source host and recreated at the target host by the virtual machine migration infrastructure. Once created at the target host, the application-server side cache is often repopulated in the typical fashion by the cache management software of the target host. For example, each time the migrated virtual machine issues a read I/O operation, and the read data is not located in the application-server side cache assigned that migrated virtual machine (that is a “miss”), the data is read from the storage of the storage controller and cached for future read operations in the application-server side cache in anticipation of future reads. Such cache repopulation is often referred to as “warming” or “rewarming” the cache and is typically very time consuming. Hence, I/O operations of the migrated virtual machine can be adversely affected by the migration until the application-server side cache for that virtual machine has been fully rewarmed.